// 方法1：getStorage() 获取本地存储数据
/**
 * 从localStorage获取指定key的值
 *
 * @param {string} key - 要从localStorage获取的项的key
 * @param {boolean} isJSON - 指定项的值是否应被视为JSON字符串，默认为false
 * @returns {any|null} - 返回存储的值，如果适用，解析为JavaScript对象，如果项不存在或解析失败，则返回null
 */
function getStorage(key, isJSON = false) {
  // 从localStorage获取指定key的项
  const item = localStorage.getItem(key)

  // 如果项的值需要被视为JSON字符串
  if (isJSON) {
    // 如果项不存在，返回null
    if (item === null) {
      return null
    }

    try {
      // 尝试解析JSON字符串为JavaScript对象
      return JSON.parse(item)
    } catch (error) {
      // 如果解析失败，记录错误信息，并返回null
      console.error(`Failed to parse JSON for key "${key}":`, error)
      return null
    }
  } else {
    // 如果项的值不需要被视为JSON字符串，直接返回该项的值
    return item
  }
}
// 方法2：setStorage() 设置本地存储数据
function setStorage(key, value) {
  const type = ['undefined', 'string', 'number']
  if (!type.includes(typeof value)) {
    value = JSON.stringify(value)
  }
  return localStorage.setItem(key, value)
}

// 方法3：removeStorage() 删除本地存储数据
function removeStorage(key) {
  return localStorage.removeItem(key)
}

// 方法4：clearStorage() 清空本地存储数据
// 设置白名单，只清空除了白名单之外的数据
function clearStorage() {
  // 定义白名单
  const whitelist = ['webInfo']

  try {
    const storageKeys = Object.keys(localStorage)
    storageKeys.forEach((key) => {
      if (!whitelist.includes(key)) {
        localStorage.removeItem(key)
      }
    })
  } catch (error) {
    console.error('无法访问 localStorage:', error)
  }
}

export { getStorage, setStorage, removeStorage, clearStorage }
